<template>
  <div class="box">
    <el-card class="box-card">
      <div slot="header" class="clearfix">
        <el-breadcrumb separator="/">
          <el-breadcrumb-item :to="{ path: '/index' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item :to="{ path: '/index/admin-info' }">用户信息</el-breadcrumb-item>
          <el-breadcrumb-item>修改密码</el-breadcrumb-item>
        </el-breadcrumb>
      </div>
      <div class="text item">
        <el-form
          :model="modifypwdForm"
          :rules="rules"
          ref="modifypwdForm"
          label-width="100px"
          class="demo-ruleForm"
        >
          <el-form-item label="原密码" prop="oldpass">
            <el-input v-model="modifypwdForm.oldpass"></el-input>
          </el-form-item>
          <el-form-item label="新密码" prop="newpass">
            <el-input v-model="modifypwdForm.newpass"></el-input>
          </el-form-item>
          <el-form-item label="确认密码" prop="password">
            <el-input v-model="modifypwdForm.password"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="submitForm('modifypwdForm')"
              >修改</el-button
            >
            <el-button @click="resetForm('modifypwdForm')">重置</el-button>
          </el-form-item>
        </el-form>
      </div>
    </el-card>
  </div>
</template>

<script>
// 导入接口方法
import { getUserByName, modifypwd } from "@/api/admin.js";
export default {
  data() {
    return {
      // 原来用户信息
      currUser: {
        userid: "",
        username: "",
        password: "",
        imgurl: "",
        email: "",
        phone: "",
        desc: "",
      },
      // 修改要提交的表单对象
      // modifypwdForm: {
      //   password: "",
      //   userid: "",
      // },
      modifypwdForm: {
        oldpass: "",
        newpass: "",
        password: "",
        userid: "",
      },
      rules: {
        // 具体的表单元素验证规则，使用数组，数组名称必须和表单元素prop一致
        // required：必填   message：错误提示   trigger：触发条件   pattern：匹配方案（正则）
        // 验证原密码规则
        oldpass: [
          {
            required: true,
            message: "密码不能为空",
            trigger: "blur",
          },
          // 长度在3-12之间，匹配正确字符
          {
            pattern: /^[a-zA-z#$@\d]{3,12}/,
            message: "长度在3-12之间",
            trigger: "blur",
          },
          // 自定义验证规则：原密码需要和当前对象currUser里面的password一致
          {
            // 可以直接使用匿名函数来做验证
            validator: (rule, value, callback) => {
              console.log(value);
              // value：填入确认密码表单文本框中的值
              // 如何判断填写的值和密码框中的值一致呢？
              // console.log(this.regForm.regpwd);
              if (value == this.currUser.password) {
                // 两次输入密码一致
                callback();
              } else {
                // 密码不一致
                callback(new Error("原密码输入不正确"));
              }
            },
            trigger: "blur",
          },
        ],
        // 新密码验证规则
        newpass: [
          {
            required: true,
            message: "密码不能为空",
            trigger: "blur",
          },
          // 长度在3-12之间，匹配正确字符
          {
            pattern: /^[a-zA-z#$@\d]{3,12}/,
            message: "长度在3-12之间",
            trigger: "blur",
          },
          // 自定义验证规则：新密码不要和原密码一样
          {
            // 可以直接使用匿名函数来做验证
            validator: (rule, value, callback) => {
              console.log(value);
              // value：填入确认密码表单文本框中的值
              // 如何判断填写的值和密码框中的值一致呢？
              // console.log(this.regForm.regpwd);
              if (value != this.currUser.password) {
                // 两次输入密码一致
                callback();
              } else {
                // 密码不一致
                callback(new Error("新密码不能和原密码相同"));
              }
            },
            trigger: "blur",
          },
        ],
        // 确认密码规则   必须要和密码框的内容一致才能通过
        password: [
          {
            required: true,
            // 可以直接使用匿名函数来做验证
            validator: (rule, value, callback) => {
              console.log(value);
              // value：填入确认密码表单文本框中的值
              // 如何判断填写的值和密码框中的值一致呢？
              // console.log(this.regForm.regpwd);
              if (value == this.modifypwdForm.newpass) {
                // 两次输入密码一致
                callback();
              } else {
                // 密码不一致
                callback(new Error("两次密码不一致"));
              }
            },
            trigger: "blur",
          },
        ],
      },
    };
  },
  methods: {
    logout(){
      // 1.token清除，logname清除
      localStorage.removeItem("token");
      localStorage.removeItem("logname");
      // 2.重新回到登录界面
      this.$router.push('/');
    },
    //获取当前用户的基本信息（根据用户名称）
    getCurrInfoByName() {
      // 问：当前用户名称是什么
      let username = localStorage.getItem("logname");
      getUserByName(username)
        .then((r) => {
          console.log(r);
          // 将服务器响应的结果赋值给当前状态值currUser
          this.currUser = r.data;
          // 将当前用户对象里面的userid传递给表单数据对象modifypwdForm.userid
          this.modifypwdForm.userid = this.currUser.userid;
        })
        .catch((e) => {
          console.log(e);
        });
    },
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          // 通过验证
          this.$message({
            type: "success",
            message: "验证通过",
          });
          // 发起请求，将正确的数据提交给服务器，等待服务器响应
          modifypwd(this.modifypwdForm)
            .then((r) => {
              console.log(r);
              if (r.data.code === 0) {
                // 修改成功，消息提示，注销用户
                this.$message({
                  type: "success",
                  message: "修改密码成功",
                });
                // 注销用户
                this.logout();
              }
            })
            .catch((e) => {
              console.log(e);
              this.$message({
                  type: "success",
                  message: "修改密码成功",
                });
            });
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
    resetForm(formName) {
      this.$refs[formName].resetFields();
    },
  },
  // 钩子函数
  created() {
    this.getCurrInfoByName();
  },
};
</script>

<style scoped>
/*.el-color-picker__icon,
.el-input,
.el-textarea {
  display: inline-block;
  width: 250px;
}*/
.el-input,
.el-textarea {
  display: inline-block;
  width: 250px;
}
.text {
  font-size: 14px;
}

.item {
  margin-bottom: 18px;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both;
}

.box-card {
  width: 100%;
}
</style>
